home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / text / WrappedPlainView.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  7.4 KB  |  246 lines

  1. package javax.swing.text;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Font;
  7. import java.awt.FontMetrics;
  8. import java.awt.Graphics;
  9. import java.awt.Rectangle;
  10. import java.awt.Shape;
  11. import javax.swing.event.DocumentEvent;
  12.  
  13. public class WrappedPlainView extends BoxView implements TabExpander {
  14.    FontMetrics metrics;
  15.    Segment lineBuffer;
  16.    boolean widthChanging;
  17.    int tabBase;
  18.    int tabSize;
  19.    boolean wordWrap;
  20.    int sel0;
  21.    int sel1;
  22.    Color unselected;
  23.    Color selected;
  24.  
  25.    public WrappedPlainView(Element var1) {
  26.       this(var1, false);
  27.    }
  28.  
  29.    public WrappedPlainView(Element var1, boolean var2) {
  30.       super(var1, 1);
  31.       this.lineBuffer = new Segment();
  32.       this.wordWrap = var2;
  33.    }
  34.  
  35.    protected int calculateBreakPosition(int var1, int var2) {
  36.       this.loadText(var1, var2);
  37.       int var3;
  38.       if (this.wordWrap) {
  39.          var3 = var1 + Utilities.getBreakLocation(this.lineBuffer, this.metrics, this.tabBase, this.tabBase + ((BoxView)this).getWidth(), this, var1);
  40.       } else {
  41.          var3 = var1 + Utilities.getTabbedTextOffset(this.lineBuffer, this.metrics, this.tabBase, this.tabBase + ((BoxView)this).getWidth(), this, var1);
  42.       }
  43.  
  44.       return var3;
  45.    }
  46.  
  47.    public void changedUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  48.       this.updateChildren(var1, var2);
  49.    }
  50.  
  51.    protected void drawLine(int var1, int var2, Graphics var3, int var4, int var5) {
  52.       Element var6 = ((View)this).getElement();
  53.       Element var7 = var6.getElement(var6.getElementIndex(var1));
  54.  
  55.       try {
  56.          if (var7.isLeaf()) {
  57.             this.drawText(var7, var1, var2, var3, var4, var5);
  58.          } else {
  59.             int var9 = var7.getElementIndex(var1);
  60.  
  61.             for(int var10 = var7.getElementIndex(var2); var9 <= var10; ++var9) {
  62.                Element var8 = var7.getElement(var9);
  63.                int var11 = Math.max(var8.getStartOffset(), var1);
  64.                int var12 = Math.min(var8.getEndOffset(), var2);
  65.                var4 = this.drawText(var8, var11, var12, var3, var4, var5);
  66.             }
  67.          }
  68.  
  69.       } catch (BadLocationException var13) {
  70.          throw new StateInvariantError("Can't render: " + var1 + "," + var2);
  71.       }
  72.    }
  73.  
  74.    protected int drawSelectedText(Graphics var1, int var2, int var3, int var4, int var5) throws BadLocationException {
  75.       var1.setColor(this.selected);
  76.       Document var6 = ((View)this).getDocument();
  77.       var6.getText(var4, var5 - var4, this.lineBuffer);
  78.       return Utilities.drawTabbedText(this.lineBuffer, var2, var3, var1, this, var4);
  79.    }
  80.  
  81.    private int drawText(Element var1, int var2, int var3, Graphics var4, int var5, int var6) throws BadLocationException {
  82.       var3 = Math.min(((View)this).getDocument().getLength(), var3);
  83.       AttributeSet var7 = var1.getAttributes();
  84.       if (Utilities.isComposedTextAttributeDefined(var7)) {
  85.          var4.setColor(this.unselected);
  86.          var5 = Utilities.drawComposedText(var7, var4, var5, var6, var2 - var1.getStartOffset(), var3 - var1.getStartOffset());
  87.       } else if (this.sel0 == this.sel1) {
  88.          var5 = this.drawUnselectedText(var4, var5, var6, var2, var3);
  89.       } else if (var2 >= this.sel0 && var2 <= this.sel1 && var3 >= this.sel0 && var3 <= this.sel1) {
  90.          var5 = this.drawSelectedText(var4, var5, var6, var2, var3);
  91.       } else if (this.sel0 >= var2 && this.sel0 <= var3) {
  92.          if (this.sel1 >= var2 && this.sel1 <= var3) {
  93.             var5 = this.drawUnselectedText(var4, var5, var6, var2, this.sel0);
  94.             var5 = this.drawSelectedText(var4, var5, var6, this.sel0, this.sel1);
  95.             var5 = this.drawUnselectedText(var4, var5, var6, this.sel1, var3);
  96.          } else {
  97.             var5 = this.drawUnselectedText(var4, var5, var6, var2, this.sel0);
  98.             var5 = this.drawSelectedText(var4, var5, var6, this.sel0, var3);
  99.          }
  100.       } else if (this.sel1 >= var2 && this.sel1 <= var3) {
  101.          var5 = this.drawSelectedText(var4, var5, var6, var2, this.sel1);
  102.          var5 = this.drawUnselectedText(var4, var5, var6, this.sel1, var3);
  103.       } else {
  104.          var5 = this.drawUnselectedText(var4, var5, var6, var2, var3);
  105.       }
  106.  
  107.       return var5;
  108.    }
  109.  
  110.    protected int drawUnselectedText(Graphics var1, int var2, int var3, int var4, int var5) throws BadLocationException {
  111.       var1.setColor(this.unselected);
  112.       Document var6 = ((View)this).getDocument();
  113.       var6.getText(var4, var5 - var4, this.lineBuffer);
  114.       return Utilities.drawTabbedText(this.lineBuffer, var2, var3, var1, this, var4);
  115.    }
  116.  
  117.    protected final Segment getLineBuffer() {
  118.       return this.lineBuffer;
  119.    }
  120.  
  121.    public float getMaximumSpan(int var1) {
  122.       this.updateMetrics();
  123.       return super.getMaximumSpan(var1);
  124.    }
  125.  
  126.    public float getMinimumSpan(int var1) {
  127.       this.updateMetrics();
  128.       return super.getMinimumSpan(var1);
  129.    }
  130.  
  131.    public float getPreferredSpan(int var1) {
  132.       this.updateMetrics();
  133.       return super.getPreferredSpan(var1);
  134.    }
  135.  
  136.    protected int getTabSize() {
  137.       Integer var1 = (Integer)((View)this).getDocument().getProperty("tabSize");
  138.       int var2 = var1 != null ? var1 : 8;
  139.       return var2;
  140.    }
  141.  
  142.    public void insertUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  143.       this.updateChildren(var1, var2);
  144.       Rectangle var4 = var2 != null && ((BoxView)this).isAllocationValid() ? ((CompositeView)this).getInsideAllocation(var2) : null;
  145.       int var5 = var1.getOffset();
  146.       View var6 = ((CompositeView)this).getViewAtPosition(var5, var4);
  147.       if (var6 != null) {
  148.          var6.insertUpdate(var1, var4, var3);
  149.       }
  150.  
  151.    }
  152.  
  153.    protected void loadChildren(ViewFactory var1) {
  154.       Element var2 = ((View)this).getElement();
  155.       int var3 = var2.getElementCount();
  156.       if (var3 > 0) {
  157.          View[] var4 = new View[var3];
  158.  
  159.          for(int var5 = 0; var5 < var3; ++var5) {
  160.             var4[var5] = new WrappedLine(this, var2.getElement(var5));
  161.          }
  162.  
  163.          ((BoxView)this).replace(0, 0, var4);
  164.       }
  165.  
  166.    }
  167.  
  168.    final void loadText(int var1, int var2) {
  169.       try {
  170.          Document var3 = ((View)this).getDocument();
  171.          var3.getText(var1, var2 - var1, this.lineBuffer);
  172.       } catch (BadLocationException var4) {
  173.          throw new StateInvariantError("Can't get line text");
  174.       }
  175.    }
  176.  
  177.    public float nextTabStop(float var1, int var2) {
  178.       int var3 = ((int)var1 - this.tabBase) / this.tabSize;
  179.       return (float)(this.tabBase + (var3 + 1) * this.tabSize);
  180.    }
  181.  
  182.    public void paint(Graphics var1, Shape var2) {
  183.       Rectangle var3 = (Rectangle)var2;
  184.       this.tabBase = var3.x;
  185.       JTextComponent var4 = (JTextComponent)((View)this).getContainer();
  186.       this.sel0 = var4.getSelectionStart();
  187.       this.sel1 = var4.getSelectionEnd();
  188.       this.unselected = ((Component)var4).isEnabled() ? ((Component)var4).getForeground() : var4.getDisabledTextColor();
  189.       Caret var5 = var4.getCaret();
  190.       this.selected = var5.isSelectionVisible() ? var4.getSelectedTextColor() : this.unselected;
  191.       var1.setFont(((Component)var4).getFont());
  192.       super.paint(var1, var2);
  193.    }
  194.  
  195.    public void removeUpdate(DocumentEvent var1, Shape var2, ViewFactory var3) {
  196.       this.updateChildren(var1, var2);
  197.       Rectangle var4 = var2 != null && ((BoxView)this).isAllocationValid() ? ((CompositeView)this).getInsideAllocation(var2) : null;
  198.       int var5 = var1.getOffset();
  199.       View var6 = ((CompositeView)this).getViewAtPosition(var5, var4);
  200.       if (var6 != null) {
  201.          var6.removeUpdate(var1, var4, var3);
  202.       }
  203.  
  204.    }
  205.  
  206.    public void setSize(float var1, float var2) {
  207.       this.updateMetrics();
  208.       if ((int)var1 != ((BoxView)this).getWidth()) {
  209.          ((BoxView)this).preferenceChanged((View)null, true, true);
  210.          this.widthChanging = true;
  211.       }
  212.  
  213.       super.setSize(var1, var2);
  214.       this.widthChanging = false;
  215.    }
  216.  
  217.    void updateChildren(DocumentEvent var1, Shape var2) {
  218.       Element var3 = ((View)this).getElement();
  219.       DocumentEvent.ElementChange var4 = var1.getChange(var3);
  220.       if (var4 != null) {
  221.          Element[] var5 = var4.getChildrenRemoved();
  222.          Element[] var6 = var4.getChildrenAdded();
  223.          View[] var7 = new View[var6.length];
  224.  
  225.          for(int var8 = 0; var8 < var6.length; ++var8) {
  226.             var7[var8] = new WrappedLine(this, var6[var8]);
  227.          }
  228.  
  229.          ((BoxView)this).replace(var4.getIndex(), var5.length, var7);
  230.          if (var2 != null) {
  231.             ((BoxView)this).preferenceChanged((View)null, true, true);
  232.             ((View)this).getContainer().repaint();
  233.          }
  234.       }
  235.  
  236.       this.updateMetrics();
  237.    }
  238.  
  239.    final void updateMetrics() {
  240.       Container var1 = ((View)this).getContainer();
  241.       Font var2 = ((Component)var1).getFont();
  242.       this.metrics = ((Component)var1).getFontMetrics(var2);
  243.       this.tabSize = this.getTabSize() * this.metrics.charWidth('m');
  244.    }
  245. }
  246.